//
//  walterFlowLayout.m
//  CollectionFlow
//
//  Created by bj_szd on 2025/5/6.
//

#import "StaticFlowLayout.h"

@interface StaticFlowLayout ()

@property (nonatomic, strong) NSMutableArray *attributeArray;
// 整个 collectionView 的 contenView 的高度
@property (nonatomic,assign) CGFloat contentHeight;
// 间距
@property (nonatomic,assign) CGFloat cellMargin;

@end

@implementation StaticFlowLayout

- (instancetype)init {
    if (self = [super init]) {
        _attributeArray = [NSMutableArray array];
        _cellMargin = 10;
    }
    return self;
}

// UICollectionView 在进行 UI 布局前，会通过这个类的对象获取相关的布局信息，就是 UICollectionViewLayoutAttributes
// 该类将这些布局信息全部存放在了一个数组中，通过 - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect 返回该数组
 
// 重写该方法：计算 item 布局
- (void)prepareLayout {
    // 定义变量记录高度最小的列：初始为第 0 列高度最小
    
    CGFloat headAllMargin = 3 * _cellMargin;
    CGFloat headAllWidth = CGRectGetWidth(self.collectionView.bounds) - headAllMargin;
    CGFloat leftItemWidth = headAllWidth / 2;
    
    CGFloat rightItemWidth = (leftItemWidth - _cellMargin) / 2;
    
    // 遍历 collectionView 中第 0 区中的所有 item
    for (int i = 0; i < [self.collectionView numberOfItemsInSection:0]; i++) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
        // 获取布局属性对象，就是每个 item 的布局属性
        UICollectionViewLayoutAttributes *layoutAttributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
        // 将布局属性放入数组中
        [_attributeArray addObject:layoutAttributes];
        if (i == 0) {
            layoutAttributes.frame = CGRectMake(_cellMargin, _cellMargin, leftItemWidth, leftItemWidth);
        } else if (i <= 4) {
            layoutAttributes.frame = CGRectMake(_cellMargin + leftItemWidth + _cellMargin + (rightItemWidth + _cellMargin) * ((i - 1) % 2), _cellMargin + (rightItemWidth + _cellMargin) * ((i - 1) / 2), rightItemWidth, rightItemWidth);
        }/* else if (i == 1) {
            layoutAttributes.frame = CGRectMake(_cellMargin + leftItemWidth + _cellMargin, _cellMargin, rightItemWidth, rightItemWidth);
        } else if (i == 2) {
            layoutAttributes.frame = CGRectMake(_cellMargin + leftItemWidth + _cellMargin + rightItemWidth + _cellMargin, _cellMargin, rightItemWidth, rightItemWidth);
        } else if (i == 3) {
            layoutAttributes.frame = CGRectMake(_cellMargin + leftItemWidth + _cellMargin, _cellMargin + rightItemWidth + _cellMargin, rightItemWidth, rightItemWidth);
        } else if (i == 4) {
            layoutAttributes.frame = CGRectMake(_cellMargin + leftItemWidth + _cellMargin + rightItemWidth + _cellMargin, _cellMargin + rightItemWidth + _cellMargin, rightItemWidth, rightItemWidth);
        }*/ else {
            layoutAttributes.frame = CGRectMake(_cellMargin + (rightItemWidth + _cellMargin) * ((i - 1) % 4), _cellMargin + leftItemWidth + _cellMargin + (rightItemWidth + _cellMargin) * (((i - 1) / 4) - 1), rightItemWidth, rightItemWidth);
        }
        // 整个内容的高度，通过比较得到较大值作为整个内容的高度
        self.contentHeight = MAX(self.contentHeight, CGRectGetMaxY(layoutAttributes.frame));
    }
}

// 返回的是每个 item 对应的布局属性
-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
    return _attributeArray;
}

// 返回 CollectionView 的滚动范围
- (CGSize)collectionViewContentSize {
    return CGSizeMake(0, _contentHeight);
}

@end
